home *** CD-ROM | disk | FTP | other *** search
Text File | 2006-03-15 | 40.2 KB | 1,203 lines |
- class FlashPaper.DocumentView extends FPUI.Component
- {
- var m_documentView;
- var pages_mc;
- var y_sb;
- static var MAX_CHARS_PER_PAGE = 2147483646;
- static var HUGE_HIT_TEST_DIST = 100000;
- static var PAGE_MARGIN = 8;
- static var MIN_WIDTH = 64;
- static var PAGE_SPACING = 24;
- static var LOADING_OFFSET = 16;
- static var VISIBILITY_MARGIN = 32;
- static var KEY_SCROLL_DISTANCE = 50;
- static var WHEEL_SCROLL_DISTANCE = 50;
- static var DROPSHADOW_HEIGHT = 2;
- static var TOOL_HYSTERESIS = 4;
- static var DBLCLICK_DIST = 2;
- static var DBLCLICK_TIME = 500;
- static var PAGE_TAB_INDEX_BASE = 400;
- static var SMART_FIND = ["\'‘’","\"“”"];
- static var WORD_BREAK = "\t\n\x0b\f\r …  ᠎           

   -­֊᠆‐‑・﹣-・\"\'«»‘’‚‛“”„‟‹›「」『』〝〞〟﹁﹂﹃﹄"'「」!,.:;?;·։،؛؟۔܀܁܂܃܄܅܆܇܈܉܊܌।॥๚๛၊။፡።፣፤፥፦፧፨᙭᙮᛫᛭។៕៖៚᠂᠃᠄᠅᠈᠉᥄᥅‼‽⁇⁈⁉、。﹐﹑﹒﹔﹕﹖﹗!,.:;?。、#$%&()*+/<=>@[\\]^`{|}" + "~";
- static var MAX_WORD_FIND_RADIUS = 100;
- var m_mainView = null;
- var m_usingTool = false;
- var m_lastClickHeadPageIdx = 0;
- var m_lastClickHeadCharIdx = -1;
- var m_useLastClickForHead = false;
- var m_headPageIdx = 0;
- var m_headCharIdx = -1;
- var m_tailPageIdx = 0;
- var m_tailCharIdx = -1;
- var m_scaledDocWidthInScreenDpi = 0;
- var m_docWidthInScreenDpi = 0;
- var m_startScrollX = 0;
- var m_startScrollY = 0;
- var m_initialMouseTime = 0;
- var m_initialMouseX = 0;
- var m_initialMouseY = 0;
- var m_mouseMovedEnough = false;
- var m_doubleClicked = false;
- var m_wordSelect = false;
- var m_curTool = "";
- var m_fpMask = null;
- var m_searchToTop = false;
- var m_smartFindChars = null;
- var m_scrollingEnabled = true;
- var m_maxPageWidth = 0;
- var m_maxPageHeight = 0;
- function DocumentView()
- {
- var _loc2_ = this;
- super();
- _loc2_.m_delayedBroadcasts = new Object();
- _loc2_.emptySelection();
- _loc2_.m_smartFindChars = new Object();
- for(var _loc3_ in FlashPaper.DocumentView.SMART_FIND)
- {
- var _loc1_ = FlashPaper.DocumentView.SMART_FIND[_loc3_];
- var _loc3_ = 0;
- while(_loc3_ < _loc1_.length)
- {
- _loc2_.m_smartFindChars[_loc1_.substr(_loc3_,1)] = _loc1_;
- _loc3_ = _loc3_ + 1;
- }
- }
- }
- function handleDelayedBroadcast()
- {
- var _loc2_ = this;
- var _loc1_ = _loc2_.m_delayedBroadcasts;
- _loc2_.m_delayedBroadcasts = new Object();
- delete _loc2_.onEnterFrame;
- for(var _loc3_ in _loc1_)
- {
- if(_loc1_[_loc3_])
- {
- _loc2_.m_mainView.broadcastMessage(_loc3_);
- }
- }
- }
- function delayedBroadcast(s, b)
- {
- var _loc1_ = this;
- _loc1_.m_delayedBroadcasts[s] = b;
- _loc1_.onEnterFrame = _loc1_.handleDelayedBroadcast;
- }
- function setMainView(p_mainView, p_searchToTop)
- {
- var _loc1_ = this;
- _loc1_.m_mainView = p_mainView;
- _loc1_.m_searchToTop = p_searchToTop;
- if(_loc1_.m_mainView)
- {
- _loc1_.m_mainView.addListener(_loc1_);
- _loc1_.m_docWidthInScreenDpi = _loc1_.m_mainView.getDocumentWidth() * _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
- _loc1_.m_scaledDocWidthInScreenDpi = _loc1_.m_docWidthInScreenDpi;
- _loc1_.y_sb.setSmallScroll(FlashPaper.DocumentView.KEY_SCROLL_DISTANCE);
- _loc1_.y_sb.setChangeHandler("sendOnScroll",_loc1_);
- _loc1_.x_sb.setSmallScroll(FlashPaper.DocumentView.KEY_SCROLL_DISTANCE);
- _loc1_.x_sb.setChangeHandler("sendOnScroll",_loc1_);
- _loc1_.bg_mc.useHandCursor = false;
- _loc1_.bg_mc.m_documentView = _loc1_;
- _loc1_.bg_mc.onRollOver = function()
- {
- this.m_documentView.onToolOver();
- };
- _loc1_.bg_mc.onMouseDown = function()
- {
- this.m_documentView.onToolDown();
- };
- _loc1_.bg_mc.onMouseMove = _loc1_.bg_mc.onEnterFrame = function()
- {
- this.m_documentView.onToolMove();
- };
- _loc1_.bg_mc.onMouseUp = function()
- {
- this.m_documentView.onToolUp();
- };
- _loc1_.bg_mc.onRollOut = _loc1_.bg_mc.onReleaseOutside = function()
- {
- this.m_documentView.onToolOut();
- };
- Mouse.addListener(_loc1_);
- _loc1_.setToolMode("pan");
- }
- _loc1_.tabChildren = true;
- if(_loc1_._accImpl != null)
- {
- delete _loc1_._accImpl;
- _loc1_._accImpl = null;
- }
- }
- function sendOnScroll()
- {
- var _loc1_ = this;
- _loc1_.m_mainView.activateHyperlinks(_loc1_.getScrolledPage(true));
- _loc1_.m_mainView.broadcastMessage("internal_onScroll");
- _loc1_.delayedBroadcast("onVisibleAreaChanged",true);
- }
- function getNthPage(i)
- {
- return this.pages_mc["page" + i + "_mc"];
- }
- function getNthTextMC(i)
- {
- var _loc1_ = this.getNthPage(i);
- if(_loc1_ != null)
- {
- return _loc1_.fpcontent_mc;
- }
- return null;
- }
- function positionMsg(pagemc)
- {
- var _loc1_ = pagemc.msg_mc;
- if(_loc1_ != undefined)
- {
- var _loc3_ = pagemc.pageBorder_mc;
- var _loc2_ = 1 / this.m_mainView.getCurrentScaleFraction();
- _loc1_._xscale = _loc1_._yscale = _loc2_ * 100;
- _loc1_._y = _loc2_ * FlashPaper.DocumentView.LOADING_OFFSET;
- _loc1_._x = pagemc._x + _loc2_ * FlashPaper.DocumentView.LOADING_OFFSET;
- _loc1_._visible = !(_loc1_._x + _loc1_._width > _loc3_._width || _loc1_._y - pagemc._y + _loc1_._height > _loc3_._height) ? true : false;
- }
- }
- function internal_onAddPage(width_i, height_i)
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_mainView.getNumPages();
- var _loc2_ = _loc1_.pages_mc.attachMovie("blank","page" + _loc3_ + "_mc",_loc3_);
- _loc1_.m_maxPageWidth = Math.max(_loc1_.m_maxPageWidth,width_i);
- _loc1_.m_maxPageHeight = Math.max(_loc1_.m_maxPageHeight,height_i);
- var pbmc = _loc2_.attachMovie("pageBorder","pageBorder_mc",10);
- var factor = _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
- pbmc._width = width_i * factor;
- pbmc._height = height_i * factor;
- _loc2_.attachMovie("pageLoadingMsg","msg_mc",11);
- _loc1_.positionMsg(_loc2_);
- FlashPaper.Utils.addShadow(_loc2_,3,pbmc._width,pbmc._height,false);
- if(_loc3_ > 1)
- {
- var mc = _loc1_.getNthPage(_loc3_ - 1);
- _loc2_._y = mc._y + mc._height + FlashPaper.DocumentView.PAGE_SPACING;
- }
- else
- {
- _loc2_._y = 0;
- }
- }
- function calcPageWidthScale()
- {
- return (this.y_sb._x - FlashPaper.DocumentView.PAGE_MARGIN * 2) / this.m_docWidthInScreenDpi * 100;
- }
- function calcPageFitScale()
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.calcPageWidthScale();
- var _loc2_ = (_loc1_.y_sb.getSize() - FlashPaper.DocumentView.PAGE_MARGIN * 2) / (_loc1_.m_maxPageHeight * _loc1_.m_mainView.getDocDpiToScreenDpiFactor()) * 100;
- var pageFitScale = Math.min(_loc2_,_loc3_);
- return pageFitScale;
- }
- function getMinWidth()
- {
- return FlashPaper.DocumentView.MIN_WIDTH;
- }
- function onResize()
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_mainView.getDocViewWidth();
- var _loc2_ = _loc1_.m_mainView.getDocViewHeight();
- _loc3_ -= !_loc1_.y_sb._visible ? 0 : _loc1_.y_sb._width;
- _loc2_ -= !_loc1_.x_sb._visible ? 0 : _loc1_.x_sb._height;
- _loc1_.y_sb._x = _loc3_;
- _loc1_.y_sb.setSize(_loc2_);
- _loc1_.y_sb.setEnabled(_loc1_.m_scrollingEnabled);
- _loc1_.x_sb._y = _loc2_;
- _loc1_.x_sb.setSize(_loc3_);
- _loc1_.x_sb.setEnabled(_loc1_.m_scrollingEnabled);
- _loc1_.bg_mc._y = - FlashPaper.DocumentView.DROPSHADOW_HEIGHT;
- _loc1_.bg_mc._x = 0;
- _loc1_.bg_mc._width = _loc3_;
- _loc1_.bg_mc._height = FlashPaper.DocumentView.DROPSHADOW_HEIGHT + _loc2_;
- _loc1_.corner_mc._visible = _loc1_.x_sb._visible && _loc1_.y_sb._visible;
- _loc1_.corner_mc._x = _loc1_.x_sb._x + _loc1_.x_sb.getSize();
- _loc1_.corner_mc._y = _loc1_.y_sb._y + _loc1_.y_sb.getSize();
- }
- function adjustBar(sb, maxScroll)
- {
- var _loc2_ = maxScroll;
- var _loc3_ = sb;
- var _loc1_ = _loc3_.getSize();
- _loc2_ -= _loc1_;
- _loc3_.setScrollProperties(_loc1_,_loc2_);
- _loc3_._visible = _loc2_ > 0;
- }
- function internal_onZoom(percent)
- {
- var _loc1_ = this;
- _loc1_.pages_mc._xscale = _loc1_.pages_mc._yscale = percent;
- _loc1_.m_scaledDocWidthInScreenDpi = _loc1_.m_docWidthInScreenDpi * (percent / 100);
- var y = _loc1_.y_sb.getScrollPosition() / _loc1_.y_sb.getMaxPos();
- if(isNaN(y) || y == Infinity)
- {
- y = 0;
- }
- var x = _loc1_.x_sb.getScrollPosition() / _loc1_.x_sb.getMaxPos();
- if(isNaN(x) || x == Infinity)
- {
- x = 0.5;
- }
- _loc1_.adjustBar(_loc1_.x_sb,_loc1_.m_scaledDocWidthInScreenDpi + FlashPaper.DocumentView.PAGE_MARGIN * 2);
- _loc1_.adjustBar(_loc1_.y_sb,_loc1_.pages_mc._height + FlashPaper.DocumentView.PAGE_MARGIN * 2 + (!_loc1_.x_sb._visible ? 0 : _loc1_.x_sb._height));
- _loc1_.onResize();
- _loc1_.y_sb.setScrollPosition(y * _loc1_.y_sb.getMaxPos());
- _loc1_.x_sb.setScrollPosition(x * _loc1_.x_sb.getMaxPos());
- _loc1_.sendOnScroll();
- var _loc3_ = _loc1_.m_mainView.getNumPages();
- var _loc2_ = 1;
- while(_loc2_ <= _loc3_)
- {
- _loc1_.positionMsg(_loc1_.getNthPage(_loc2_));
- _loc2_ = _loc2_ + 1;
- }
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- function onScrollSB(sb, s, i)
- {
- var _loc1_ = undefined;
- if(sb._visible)
- {
- _loc1_ = sb.getScrollPosition();
- if(isNaN(_loc1_) || _loc1_ < 0)
- {
- _loc1_ = 0;
- }
- }
- else
- {
- _loc1_ = i;
- }
- this.pages_mc[s] = - _loc1_ + FlashPaper.DocumentView.PAGE_MARGIN;
- this.m_mainView.onPageMayHaveChanged();
- }
- function internal_onScroll()
- {
- var _loc1_ = this;
- _loc1_.onScrollSB(_loc1_.x_sb,"_x",(- (_loc1_.y_sb._x - _loc1_.m_scaledDocWidthInScreenDpi)) / 2 + FlashPaper.DocumentView.PAGE_MARGIN);
- _loc1_.onScrollSB(_loc1_.y_sb,"_y",0);
- }
- function getVisibleArea()
- {
- var _loc1_ = this;
- var _loc2_ = new Object();
- var _loc3_ = _loc1_.m_mainView.getCurrentScaleFraction();
- _loc2_.x = _loc1_.x_sb.getScrollPosition() / _loc3_;
- _loc2_.y = _loc1_.y_sb.getScrollPosition() / _loc3_;
- _loc2_.w = (_loc1_.bg_mc._width - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc3_;
- _loc2_.h = (_loc1_.bg_mc._height - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc3_;
- _loc2_.s = _loc1_.m_mainView.getSidebarWidth() / _loc1_.m_mainView.getWidth();
- _loc2_.equals = function(that)
- {
- var _loc1_ = this;
- var _loc2_ = that;
- var _loc0_ = _loc1_.x == _loc2_.x && _loc1_.y == _loc2_.y && _loc1_.w == _loc2_.w && _loc1_.h == _loc2_.h && _loc1_.s == _loc2_.s;
- _loc2_;
- _loc1_;
- return _loc0_;
- };
- return _loc2_;
- }
- function setVisibleArea(area, skipBroadcast)
- {
- var _loc1_ = this;
- var _loc2_ = area;
- var w = (_loc1_.bg_mc._width - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc2_.w;
- var h = (_loc1_.bg_mc._height - FlashPaper.DocumentView.PAGE_MARGIN * 2) / _loc2_.h;
- _loc1_.m_mainView.setCurrentZoom(Math.min(w,h) * 100);
- var _loc3_ = _loc1_.m_mainView.getCurrentScaleFraction();
- _loc1_.x_sb.setScrollPosition(_loc2_.x * _loc3_);
- _loc1_.y_sb.setScrollPosition(_loc2_.y * _loc3_);
- _loc1_.m_mainView.setSidebarWidth(_loc2_.s * _loc1_.m_mainView.getWidth());
- if(skipBroadcast)
- {
- _loc1_.delayedBroadcast("onVisibleAreaChanged",false);
- }
- }
- function onEnableScrolling(flag)
- {
- var _loc1_ = this;
- _loc1_.m_scrollingEnabled = flag;
- if(!_loc1_.m_scrollingEnabled && _loc1_.m_curTool == "pan")
- {
- _loc1_.setToolMode("");
- }
- else if(_loc1_.m_scrollingEnabled && _loc1_.m_curTool == "")
- {
- _loc1_.setToolMode("pan");
- }
- _loc1_.onResize();
- }
- function setPage(pageNum_i)
- {
- var _loc1_ = this;
- _loc1_.y_sb.setScrollPosition(_loc1_.getNthPage(pageNum_i)._y * _loc1_.m_mainView.getCurrentScaleFraction());
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- function goToAnchor(anchor_o)
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.getNthPage(anchor_o.pageNum_i);
- var _loc2_ = _loc1_.m_mainView.getDocDpiToScreenDpiFactor();
- _loc1_.ensureVisibleSB(_loc1_.y_sb,_loc3_._y + anchor_o.top_i * _loc2_,_loc3_._y + anchor_o.bottom_i * _loc2_,_loc1_.m_searchToTop,false);
- _loc1_.ensureVisibleSB(_loc1_.x_sb,_loc3_._x + anchor_o.left_i * _loc2_,_loc3_._x + anchor_o.right_i * _loc2_,false,false);
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- function hitTestTextMC()
- {
- var _loc3_ = this.m_mainView.getNumPages();
- var _loc1_ = 1;
- while(_loc1_ <= _loc3_)
- {
- var _loc2_ = this.getNthTextMC(_loc1_);
- if(_loc2_ != null && FlashPaper.Utils.doMouseHitTest(_loc2_))
- {
- return _loc1_;
- }
- _loc1_ = _loc1_ + 1;
- }
- return 0;
- }
- function selectRange(startmc_i, startIdx_i, endmc_i, endIdx_i, select_b)
- {
- if(endmc_i < startmc_i)
- {
- this.selectRange(endmc_i,endIdx_i,startmc_i,startIdx_i,select_b);
- }
- else
- {
- var _loc3_ = startIdx_i;
- var end_i = FlashPaper.DocumentView.MAX_CHARS_PER_PAGE;
- var _loc2_ = startmc_i;
- while(_loc2_ <= endmc_i)
- {
- if(_loc2_ == endmc_i)
- {
- end_i = endIdx_i;
- }
- var text_mc = this.getNthTextMC(_loc2_);
- if(text_mc != null)
- {
- var _loc1_ = text_mc.getTS(select_b);
- if(_loc1_ != null)
- {
- _loc1_.setSelectColor(FPUI.Component.kHiliteColor);
- if(_loc3_ <= end_i)
- {
- _loc1_.setSelected(_loc3_,end_i + 1,select_b);
- }
- else
- {
- _loc1_.setSelected(end_i,_loc3_ + 1,select_b);
- }
- }
- }
- _loc3_ = 0;
- _loc3_ = 0;
- _loc2_ = _loc2_ + 1;
- }
- }
- }
- function findPageWordBoundary(page_i, char_i, dir_i, select_b)
- {
- var _loc3_ = char_i;
- var _loc2_ = this.getNthTextMC(page_i);
- if(_loc2_ != null)
- {
- var _loc1_ = _loc2_.getTS(select_b);
- if(_loc1_ != null)
- {
- _loc3_ = FlashPaper.DocumentView.findWordBoundary(_loc1_,_loc3_,dir_i);
- }
- }
- return _loc3_;
- }
- static function findWordBoundary(textSnapshot_ts, start_i, dir_i)
- {
- var _loc1_ = start_i;
- var _loc3_ = Math.max(_loc1_ - FlashPaper.DocumentView.MAX_WORD_FIND_RADIUS,0);
- var end_i = Math.min(_loc1_ + FlashPaper.DocumentView.MAX_WORD_FIND_RADIUS,textSnapshot_ts.getCount() - 1);
- while(true)
- {
- var _loc2_ = textSnapshot_ts.getText(_loc1_,_loc1_ + 1);
- if(FlashPaper.DocumentView.WORD_BREAK.indexOf(_loc2_) != -1)
- {
- break;
- }
- _loc1_ += dir_i;
- if(_loc1_ < _loc3_)
- {
- return _loc3_;
- }
- if(_loc1_ > end_i)
- {
- return end_i;
- }
- }
- if(_loc1_ != start_i)
- {
- _loc1_ -= dir_i;
- }
- return _loc1_;
- }
- function emptySelection()
- {
- var _loc1_ = this;
- _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,false);
- _loc1_.m_headPageIdx = 0;
- _loc1_.m_headCharIdx = -1;
- _loc1_.m_tailPageIdx = 0;
- _loc1_.m_tailCharIdx = -1;
- _loc1_.delayedBroadcast("onSelection",true);
- }
- function tossAllTS()
- {
- this.emptySelection();
- var _loc3_ = this.m_mainView.getNumPages();
- var _loc1_ = 1;
- while(_loc1_ <= _loc3_)
- {
- var _loc2_ = this.getNthTextMC(_loc1_);
- if(_loc2_ != null)
- {
- _loc2_.freeTS();
- }
- _loc1_ = _loc1_ + 1;
- }
- updateAfterEvent();
- }
- function getSelectionOrder()
- {
- var _loc1_ = this;
- if(_loc1_.m_headPageIdx < _loc1_.m_tailPageIdx)
- {
- return -1;
- }
- if(_loc1_.m_headPageIdx > _loc1_.m_tailPageIdx)
- {
- return 1;
- }
- if(_loc1_.m_headCharIdx < _loc1_.m_tailCharIdx)
- {
- return -1;
- }
- if(_loc1_.m_headCharIdx > _loc1_.m_tailCharIdx)
- {
- return 1;
- }
- return 0;
- }
- function updateSelectionRange(startmc_i, startIdx_i, endmc_i, endIdx_i)
- {
- var _loc1_ = this;
- _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,false);
- _loc1_.m_headPageIdx = startmc_i;
- _loc1_.m_headCharIdx = startIdx_i;
- _loc1_.m_tailPageIdx = endmc_i;
- _loc1_.m_tailCharIdx = endIdx_i;
- if(_loc1_.m_wordSelect)
- {
- var _loc2_ = _loc1_.getSelectionOrder() > 0 ? 1 : -1;
- _loc1_.m_headCharIdx = _loc1_.findPageWordBoundary(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc2_,true);
- _loc1_.m_tailCharIdx = _loc1_.findPageWordBoundary(_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,- _loc2_,true);
- }
- _loc1_.selectRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,true);
- _loc1_.m_lastClickHeadPageIdx = startmc_i;
- _loc1_.m_lastClickHeadCharIdx = startIdx_i;
- _loc1_.delayedBroadcast("onSelection",true);
- }
- function updateSelectionTail(newTailMC_i, newTailIdx_i)
- {
- var _loc1_ = this;
- var _loc2_ = newTailMC_i;
- var _loc3_ = newTailIdx_i;
- if(_loc3_ >= 0)
- {
- var order = _loc1_.getSelectionOrder();
- var dir_i = 0;
- if(order <= 0 && (_loc2_ == _loc1_.m_tailPageIdx && _loc3_ > _loc1_.m_tailCharIdx || _loc2_ > _loc1_.m_tailPageIdx))
- {
- dir_i = 1;
- }
- else if(order >= 0 && (_loc2_ == _loc1_.m_tailPageIdx && _loc3_ < _loc1_.m_tailCharIdx || _loc2_ < _loc1_.m_tailPageIdx))
- {
- dir_i = -1;
- }
- if(dir_i != 0)
- {
- if(_loc1_.m_wordSelect)
- {
- _loc3_ = _loc1_.findPageWordBoundary(_loc2_,_loc3_,dir_i,true);
- }
- _loc1_.selectRange(_loc1_.m_tailPageIdx,_loc1_.m_tailCharIdx,_loc2_,_loc3_,true);
- _loc1_.m_tailPageIdx = _loc2_;
- _loc1_.m_tailCharIdx = _loc3_;
- _loc1_.delayedBroadcast("onSelection",true);
- }
- else if(_loc2_ != _loc1_.m_tailPageIdx || _loc3_ != _loc1_.m_tailCharIdx)
- {
- _loc1_.updateSelectionRange(_loc1_.m_headPageIdx,_loc1_.m_headCharIdx,_loc2_,_loc3_);
- }
- }
- }
- function keyDown(key_i)
- {
- var _loc1_ = this;
- if(_loc1_.m_scrollingEnabled)
- {
- if(!FPUI.Component.focusedComponent.m_eatsNavKeysWhenFocused)
- {
- var _loc3_ = Selection.getFocus() == null;
- var scrollX_i = _loc1_.x_sb.getScrollPosition();
- var _loc2_ = _loc1_.y_sb.getScrollPosition();
- switch(key_i)
- {
- case 34:
- _loc2_ += _loc1_.y_sb.getSize();
- break;
- case 33:
- _loc2_ -= _loc1_.y_sb.getSize();
- break;
- case 35:
- if(_loc3_)
- {
- _loc2_ = _loc1_.y_sb.getMaxPos();
- }
- break;
- case 36:
- if(_loc3_)
- {
- _loc2_ = 0;
- }
- break;
- case 40:
- _loc2_ += FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
- break;
- case 38:
- _loc2_ -= FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
- break;
- case 37:
- if(_loc3_)
- {
- scrollX_i -= FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
- }
- break;
- case 39:
- if(_loc3_)
- {
- scrollX_i += FlashPaper.DocumentView.KEY_SCROLL_DISTANCE;
- }
- }
- _loc1_.y_sb.setScrollPosition(_loc2_);
- _loc1_.x_sb.setScrollPosition(scrollX_i);
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- }
- }
- static function unionPoint(x, y, rect)
- {
- var _loc1_ = rect;
- _loc1_.left = Math.min(_loc1_.left,x);
- _loc1_.right = Math.max(_loc1_.right,x);
- _loc1_.top = Math.min(_loc1_.top,y);
- _loc1_.bottom = Math.max(_loc1_.bottom,y);
- }
- function getSelectionRect(onlyFirstPage)
- {
- var sel = null;
- var start_i = this.m_headCharIdx;
- var end_i = FlashPaper.DocumentView.MAX_CHARS_PER_PAGE;
- var i = this.m_headPageIdx;
- while(i <= this.m_tailPageIdx)
- {
- var text_mc = this.getNthTextMC(i);
- if(text_mc != null)
- {
- var textSnapshot_ts = text_mc.getTS(true);
- if(textSnapshot_ts != null)
- {
- if(i == this.m_tailPageIdx)
- {
- end_i = this.m_tailCharIdx;
- }
- if(sel == null)
- {
- sel = new Object();
- sel.left = 1000000000;
- sel.top = 1000000000;
- sel.right = -1000000000;
- sel.bottom = -1000000000;
- }
- if(textSnapshot_ts.getTextRunInfo === undefined)
- {
- var pagemc = this.getNthPage(i);
- FlashPaper.DocumentView.unionPoint(pagemc._x,pagemc._y,sel);
- FlashPaper.DocumentView.unionPoint(pagemc._x + pagemc._width,pagemc._y + pagemc._height,sel);
- }
- else
- {
- var _loc1_ = new Object();
- var info = textSnapshot_ts.getTextRunInfo(start_i,end_i);
- var _loc3_ = 0;
- while(_loc3_ < info.length)
- {
- var _loc2_ = 0;
- while(_loc2_ < 4)
- {
- _loc1_.x = info[_loc3_]["corner" + _loc2_ + "x"];
- _loc1_.y = info[_loc3_]["corner" + _loc2_ + "y"];
- text_mc.localToGlobal(_loc1_);
- this.pages_mc.globalToLocal(_loc1_);
- FlashPaper.DocumentView.unionPoint(_loc1_.x,_loc1_.y,sel);
- _loc2_ = _loc2_ + 1;
- }
- _loc3_ = _loc3_ + 1;
- }
- }
- if(onlyFirstPage)
- {
- break;
- }
- }
- }
- start_i = 0;
- ++i;
- }
- return sel;
- }
- function ensureVisibleSB(sb, min, max, toTop, includeSlop)
- {
- if(sb._visible)
- {
- var _loc2_ = this.m_mainView.getCurrentScaleFraction();
- var curScrollPos = sb.getScrollPosition();
- var _loc1_ = Math.round(curScrollPos / _loc2_);
- var curVisMax = Math.round((curScrollPos + (!toTop ? sb.getSize() : FlashPaper.DocumentView.VISIBILITY_MARGIN)) / _loc2_);
- var _loc3_ = !includeSlop ? 0 : FlashPaper.DocumentView.VISIBILITY_MARGIN / _loc2_;
- min -= _loc3_;
- max += _loc3_;
- if(max > curVisMax)
- {
- _loc1_ = Math.round(max - (curVisMax - _loc1_));
- }
- if(min < _loc1_)
- {
- _loc1_ = min;
- }
- return sb.setScrollPosition(_loc1_ * _loc2_);
- }
- return false;
- }
- function ensureSelectionIsVisible()
- {
- var _loc1_ = this;
- var _loc2_ = _loc1_.getSelectionRect(true);
- if(_loc2_ != null)
- {
- _loc1_.ensureVisibleSB(_loc1_.x_sb,_loc2_.left,_loc2_.right,false,true);
- var _loc3_ = _loc1_.ensureVisibleSB(_loc1_.y_sb,_loc2_.top,_loc2_.bottom,_loc1_.m_searchToTop,true);
- if(_loc3_)
- {
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- }
- }
- static function charsMatch(src, pattern, matcher)
- {
- var _loc2_ = src;
- var _loc3_ = pattern;
- if(_loc2_.length == _loc3_.length)
- {
- if(_loc2_ == _loc3_)
- {
- return true;
- }
- var _loc1_ = matcher[_loc3_];
- if(_loc1_ != undefined)
- {
- if(_loc1_.indexOf(_loc2_) != -1)
- {
- return true;
- }
- }
- }
- return false;
- }
- static function findSpecial(textSnapshot_ts, startIdx_i, pattern, caseSens_b, matcher)
- {
- if(!caseSens_b)
- {
- pattern = pattern.toLowerCase();
- }
- var count = textSnapshot_ts.getCount();
- var _loc3_ = startIdx_i;
- while(true)
- {
- if(_loc3_ < count)
- {
- var _loc2_ = textSnapshot_ts.getText(_loc3_,_loc3_ + pattern.length);
- if(!caseSens_b)
- {
- _loc2_ = _loc2_.toLowerCase();
- }
- if(FlashPaper.DocumentView.charsMatch(_loc2_.charAt(0),pattern.charAt(0),matcher))
- {
- var found = true;
- var _loc1_ = 1;
- while(_loc1_ < pattern.length)
- {
- if(!FlashPaper.DocumentView.charsMatch(_loc2_.charAt(_loc1_),pattern.charAt(_loc1_),matcher))
- {
- found = false;
- break;
- }
- _loc1_ = _loc1_ + 1;
- }
- if(found)
- {
- break;
- }
- }
- }
- else
- {
- return -1;
- }
- _loc3_ = _loc3_ + 1;
- }
- return _loc3_;
- }
- function findText(textToFind_str, caseSens_b)
- {
- var _loc2_ = this;
- var anySpecial = false;
- var j = 0;
- while(j < textToFind_str.length)
- {
- if(_loc2_.m_smartFindChars[textToFind_str.charAt(j)] != undefined)
- {
- anySpecial = true;
- break;
- }
- j++;
- }
- var startmc_i = _loc2_.m_tailPageIdx;
- if(startmc_i == 0)
- {
- startmc_i = 1;
- }
- var startIdx_i = _loc2_.m_tailCharIdx + 1;
- if(startIdx_i < 0)
- {
- startIdx_i = 0;
- }
- if(_loc2_.m_lastFindStr != textToFind_str)
- {
- startmc_i = 1;
- startIdx_i = 0;
- _loc2_.m_lastFindStr = textToFind_str;
- }
- var found = false;
- var np = _loc2_.m_mainView.getNumPages();
- var _loc1_ = startmc_i;
- while(_loc1_ <= np)
- {
- var text_mc = _loc2_.getNthTextMC(_loc1_);
- if(text_mc != null)
- {
- var textSnapshot_ts = text_mc.getTS(true);
- var _loc3_ = undefined;
- if(anySpecial)
- {
- _loc3_ = FlashPaper.DocumentView.findSpecial(textSnapshot_ts,startIdx_i,textToFind_str,caseSens_b,_loc2_.m_smartFindChars);
- }
- else
- {
- _loc3_ = textSnapshot_ts.findText(startIdx_i,textToFind_str,caseSens_b);
- }
- if(_loc3_ >= 0)
- {
- _loc2_.updateSelectionRange(_loc1_,_loc3_,_loc1_,_loc3_ + textToFind_str.length - 1);
- _loc2_.ensureSelectionIsVisible();
- found = true;
- break;
- }
- }
- startIdx_i = 0;
- _loc1_ = _loc1_ + 1;
- }
- if(!found)
- {
- _loc2_.selectRange(_loc2_.m_headPageIdx,_loc2_.m_headCharIdx,_loc2_.m_tailPageIdx,_loc2_.m_tailCharIdx,false);
- _loc2_.emptySelection();
- }
- return found;
- }
- function getTextSelectionRange()
- {
- var _loc2_ = this;
- if(_loc2_.m_headCharIdx < 0)
- {
- return null;
- }
- var _loc1_ = new FlashPaper.SelectionRange();
- _loc1_.headPageIdx = _loc2_.m_headPageIdx;
- _loc1_.headCharIdx = _loc2_.m_headCharIdx;
- _loc1_.tailPageIdx = _loc2_.m_tailPageIdx;
- _loc1_.tailCharIdx = _loc2_.m_tailCharIdx;
- return _loc1_;
- }
- function setTextSelectionRange(sel, skipBroadcast)
- {
- var _loc1_ = sel;
- var _loc2_ = this;
- if(_loc1_)
- {
- _loc2_.updateSelectionRange(_loc1_.headPageIdx,_loc1_.headCharIdx,_loc1_.tailPageIdx,_loc1_.tailCharIdx);
- }
- else
- {
- _loc2_.emptySelection();
- }
- if(skipBroadcast)
- {
- _loc2_.delayedBroadcast("onSelection",false);
- }
- }
- function getSelectedText()
- {
- var text_s = "";
- var np = this.m_mainView.getNumPages();
- var _loc2_ = 1;
- while(_loc2_ <= np)
- {
- var _loc3_ = this.getNthTextMC(_loc2_);
- if(_loc3_ != null)
- {
- var textSnapshot_ts = _loc3_.getTS(true);
- var _loc1_ = textSnapshot_ts.getSelectedText(true);
- if(_loc1_ != null)
- {
- if(text_s.length > 0 && _loc1_.length > 0)
- {
- text_s += "\n";
- }
- text_s += _loc1_;
- }
- }
- _loc2_ = _loc2_ + 1;
- }
- return text_s;
- }
- function getToolMode()
- {
- return this.m_curTool;
- }
- function setToolMode(newTool)
- {
- var _loc1_ = this;
- var _loc2_ = newTool;
- switch(_loc2_)
- {
- case "":
- break;
- case "select":
- if(_loc1_.getTextSnapshot == null)
- {
- return false;
- }
- break;
- case "pan":
- if(!_loc1_.m_scrollingEnabled)
- {
- return false;
- }
- break;
- default:
- return false;
- }
- if(_loc1_.m_curTool != _loc2_)
- {
- if(_loc1_.m_curTool == "select")
- {
- _loc1_.tossAllTS();
- }
- _loc1_.m_curTool = _loc2_;
- if(FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
- {
- _loc1_.m_mainView.setCursor(_loc1_,_loc2_);
- }
- _loc1_.m_mainView.broadcastMessage("onToolChanged",_loc2_);
- }
- return true;
- }
- function onToolOver()
- {
- var _loc1_ = this;
- _loc1_.m_mainView.setCursorFocus(_loc1_);
- _loc1_.m_mainView.setCursor(_loc1_,_loc1_.m_curTool);
- }
- function onToolOut()
- {
- this.m_mainView.setCursor(this,"");
- }
- function distFromClickIsWithin(i)
- {
- var _loc1_ = this;
- var _loc0_ = Math.abs(_loc1_.m_mainView.getMouseY() - _loc1_.m_initialMouseY) <= i && Math.abs(_loc1_.m_mainView.getMouseX() - _loc1_.m_initialMouseX) <= i;
- _loc1_;
- return _loc0_;
- }
- function onToolDown()
- {
- var _loc1_ = this;
- if(FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
- {
- _loc1_.m_usingTool = true;
- _loc1_.m_doubleClicked = false;
- _loc1_.m_wordSelect = false;
- _loc1_.m_useLastClickForHead = false;
- if(getTimer() - _loc1_.m_initialMouseTime <= FlashPaper.DocumentView.DBLCLICK_TIME)
- {
- if(_loc1_.distFromClickIsWithin(FlashPaper.DocumentView.DBLCLICK_DIST))
- {
- _loc1_.m_doubleClicked = true;
- }
- }
- _loc1_.m_initialMouseTime = getTimer();
- _loc1_.m_initialMouseX = _loc1_.m_mainView.getMouseX();
- _loc1_.m_initialMouseY = _loc1_.m_mainView.getMouseY();
- _loc1_.m_mouseMovedEnough = false;
- switch(_loc1_.m_curTool)
- {
- case "pan":
- if(!_loc1_.m_scrollingEnabled)
- {
- _loc1_.m_usingTool = false;
- break;
- }
- _loc1_.m_startScrollY = _loc1_.y_sb.getScrollPosition();
- if(isNaN(_loc1_.m_startScrollY))
- {
- _loc1_.m_startScrollY = 0;
- }
- _loc1_.m_startScrollX = _loc1_.x_sb.getScrollPosition();
- if(isNaN(_loc1_.m_startScrollX))
- {
- _loc1_.m_startScrollX = 0;
- }
- break;
- case "select":
- _loc1_.m_wordSelect = _loc1_.m_doubleClicked;
- var _loc3_ = _loc1_.hitTestTextMC();
- if(_loc3_)
- {
- var text_mc = _loc1_.getNthTextMC(_loc3_);
- var textSnapshot_ts = text_mc.getTS(true);
- var _loc2_ = textSnapshot_ts.hitTestTextNearPos(text_mc._xmouse,text_mc._ymouse,FlashPaper.DocumentView.HUGE_HIT_TEST_DIST);
- var extend = Key.isDown(16);
- if(extend)
- {
- if(_loc1_.m_headCharIdx < 0)
- {
- _loc1_.m_headPageIdx = _loc1_.m_lastClickHeadPageIdx;
- _loc1_.m_headCharIdx = _loc1_.m_lastClickHeadCharIdx;
- }
- if(_loc1_.m_headCharIdx < 0)
- {
- _loc2_ = -1;
- extend = false;
- }
- }
- else
- {
- _loc1_.emptySelection();
- }
- if(_loc2_ >= 0)
- {
- if(extend)
- {
- _loc1_.updateSelectionTail(_loc3_,_loc2_);
- }
- else if(_loc1_.m_wordSelect)
- {
- _loc1_.updateSelectionRange(_loc3_,_loc2_,_loc3_,_loc2_);
- }
- else
- {
- _loc1_.m_lastClickHeadPageIdx = _loc3_;
- _loc1_.m_lastClickHeadCharIdx = _loc2_;
- _loc1_.m_useLastClickForHead = true;
- }
- }
- else if(!extend)
- {
- _loc1_.emptySelection();
- }
- }
- }
- }
- }
- function onToolMove()
- {
- var _loc1_ = this;
- if(_loc1_.m_usingTool)
- {
- if(!_loc1_.m_mouseMovedEnough)
- {
- if(!_loc1_.distFromClickIsWithin(FlashPaper.DocumentView.TOOL_HYSTERESIS))
- {
- _loc1_.m_mouseMovedEnough = true;
- }
- }
- switch(_loc1_.m_curTool)
- {
- case "pan":
- FlashPaper.DocumentView.handleAbsoluteScroll(_loc1_.y_sb,_loc1_.m_startScrollY - (_loc1_.m_mainView.getMouseY() - _loc1_.m_initialMouseY));
- FlashPaper.DocumentView.handleAbsoluteScroll(_loc1_.x_sb,_loc1_.m_startScrollX - (_loc1_.m_mainView.getMouseX() - _loc1_.m_initialMouseX));
- break;
- case "select":
- if(!FlashPaper.Utils.doMouseHitTest(_loc1_.bg_mc))
- {
- var _loc2_ = _loc1_.m_mainView.getBoundsInMainViewCoords(_loc1_.bg_mc);
- FlashPaper.DocumentView.handleAutoScroll(_loc1_.y_sb,_loc1_.m_mainView.getMouseY(),_loc2_.yMin,_loc2_.yMax);
- FlashPaper.DocumentView.handleAutoScroll(_loc1_.x_sb,_loc1_.m_mainView.getMouseX(),_loc2_.xMin,_loc2_.xMax);
- }
- var _loc3_ = _loc1_.hitTestTextMC();
- if(_loc3_ != 0)
- {
- if(_loc1_.m_headPageIdx != 0 || _loc1_.m_useLastClickForHead && _loc1_.m_lastClickHeadPageIdx != 0)
- {
- var text_mc = _loc1_.getNthTextMC(_loc3_);
- var textSnapshot_ts = text_mc.getTS(true);
- var index = textSnapshot_ts.hitTestTextNearPos(text_mc._xmouse,text_mc._ymouse,FlashPaper.DocumentView.HUGE_HIT_TEST_DIST);
- if(_loc1_.m_mouseMovedEnough)
- {
- if(_loc1_.m_useLastClickForHead)
- {
- _loc1_.updateSelectionRange(_loc1_.m_lastClickHeadPageIdx,_loc1_.m_lastClickHeadCharIdx,_loc3_,index);
- _loc1_.m_useLastClickForHead = false;
- }
- else
- {
- _loc1_.updateSelectionTail(_loc3_,index);
- }
- }
- }
- }
- }
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- updateAfterEvent();
- }
- function onToolUp()
- {
- var _loc1_ = this;
- _loc1_.m_usingTool = false;
- _loc1_.m_wordSelect = false;
- _loc1_.m_useLastClickForHead = false;
- }
- static function handleAbsoluteScroll(sb, scrollPos)
- {
- var _loc1_ = sb;
- if(_loc1_ != null && _loc1_._visible && _loc1_.getScrollPosition() != scrollPos)
- {
- _loc1_.setScrollPosition(scrollPos);
- return true;
- }
- return false;
- }
- static function handleRelativeScroll(sb, delta_i)
- {
- if(delta_i != 0)
- {
- return FlashPaper.DocumentView.handleAbsoluteScroll(sb,sb.getScrollPosition() + delta_i);
- }
- return false;
- }
- static function handleAutoScroll(sb, pos_i, minpos_i, maxpos_i)
- {
- var _loc1_ = pos_i;
- var _loc3_ = sb;
- if(_loc3_ != null && _loc3_._visible)
- {
- var _loc2_ = undefined;
- if(_loc1_ > maxpos_i)
- {
- _loc2_ = _loc1_ - maxpos_i;
- }
- else if(_loc1_ < minpos_i)
- {
- _loc2_ = _loc1_ - minpos_i;
- }
- return FlashPaper.DocumentView.handleRelativeScroll(_loc3_,_loc2_);
- }
- return false;
- }
- function onMouseWheel(delta)
- {
- var _loc1_ = this;
- if(_loc1_.m_scrollingEnabled)
- {
- if(!_loc1_.m_usingTool && _loc1_.y_sb._visible && delta != 0)
- {
- var _loc2_ = _loc1_.y_sb.getScrollPosition();
- if(isNaN(_loc2_))
- {
- _loc2_ = 0;
- }
- _loc2_ -= delta * FlashPaper.DocumentView.WHEEL_SCROLL_DISTANCE;
- _loc1_.y_sb.setScrollPosition(_loc2_);
- _loc1_.m_mainView.onPageMayHaveChanged();
- }
- }
- }
- function getScrolledPage(middle)
- {
- var _loc2_ = this;
- var _loc3_ = _loc2_.y_sb.getScrollPosition();
- if(middle)
- {
- _loc3_ += _loc2_.y_sb.getSize() / 2;
- }
- _loc3_ = Math.round(_loc3_ / _loc2_.m_mainView.getCurrentScaleFraction());
- var _loc1_ = _loc2_.m_mainView.getNumPages();
- while(_loc1_ > 0)
- {
- if(_loc2_.getNthPage(_loc1_)._y <= _loc3_)
- {
- return _loc1_;
- }
- _loc1_ = _loc1_ - 1;
- }
- return 1;
- }
- function rebuildMask()
- {
- var _loc1_ = this;
- var _loc3_ = _loc1_.m_mainView.getDocViewWidth();
- var _loc2_ = _loc1_.m_mainView.getDocViewHeight();
- _loc1_.setMask(null);
- _loc1_.m_fpMask.removeMovieClip();
- _loc1_.createEmptyMovieClip("m_fpMask",1066);
- _loc1_.m_fpMask.beginFill(0,100);
- _loc1_.m_fpMask.moveTo(0,0);
- _loc1_.m_fpMask.lineTo(_loc3_,0);
- _loc1_.m_fpMask.lineTo(_loc3_,_loc2_);
- _loc1_.m_fpMask.lineTo(0,_loc2_);
- _loc1_.m_fpMask.lineTo(0,0);
- _loc1_.m_fpMask.endFill();
- _loc1_.setMask(_loc1_.m_fpMask);
- }
- }
-